package com.burke.gwt.client;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.canvas.dom.client.Context2d;
import com.google.gwt.dom.client.ImageElement;
import com.google.gwt.user.client.ui.Image;

public class Digit {

	static List<boolean[]> digits = new ArrayList<boolean[]>();
	
	static {
		//Zero
		digits.add(new boolean[]{
				true,true,true,true,
				true,false,false,true,
				true,false,false,true,
				true,false,false,true,
				true,false,false,true,
				true,false,false,true,
				true,true,true,true
		});
		//One
		digits.add(new boolean[]{
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true
		});
		//Two
		digits.add(new boolean[]{
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				true,true,true,true,
				true,false,false,false,
				true,false,false,false,
				true,true,true,true
		});
		//Three
		digits.add(new boolean[]{
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				true,true,true,true
		});
		//Four
		digits.add(new boolean[]{
				true,false,false,true,
				true,false,false,true,
				true,false,false,true,
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true
		});
		//Five
		digits.add(new boolean[]{
				true,true,true,true,
				true,false,false,false,
				true,false,false,false,
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				true,true,true,true
		});
		//Six
		digits.add(new boolean[]{
				true,true,true,true,
				true,false,false,false,
				true,false,false,false,
				true,true,true,true,
				true,false,false,true,
				true,false,false,true,
				true,true,true,true
		});
		//Seven
		digits.add(new boolean[]{
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true,
				false,false,false,true
		});
		//Eight
		digits.add(new boolean[]{
				true,true,true,true,
				true,false,false,true,
				true,false,false,true,
				true,true,true,true,
				true,false,false,true,
				true,false,false,true,
				true,true,true,true
		});
		//Nine
		digits.add(new boolean[]{
				true,true,true,true,
				true,false,false,true,
				true,false,false,true,
				true,true,true,true,
				false,false,false,true,
				false,false,false,true,
				true,true,true,true
		});
	}
	
	
	private LED[] leds;
	private int digit;
	int x;
	int y;
	final Clock clock;
	
	void createLEDs() {

		
		leds = new LED[]{
		//Row 1
		new LED(0,0,LEDType.ONE,this),
		new LED(20,0,LEDType.ONE,this),
		new LED(40,0,LEDType.ONE,this),
		new LED(60,0,LEDType.ONE,this),
		//Row 2
		new LED(0,20,LEDType.ONE,this),
		new LED(20,20,LEDType.ONE,this),
		new LED(40,20,LEDType.ONE,this),
		new LED(60,20,LEDType.ONE,this),
		//Row 3
		new LED(0,40,LEDType.ONE,this),
		new LED(20,40,LEDType.ONE,this),
		new LED(40,40,LEDType.ONE,this),
		new LED(60,40,LEDType.ONE,this),
		//Row 4
		new LED(0,60,LEDType.ONE,this),
		new LED(20,60,LEDType.ONE,this),
		new LED(40,60,LEDType.ONE,this),
		new LED(60,60,LEDType.ONE,this),
		//Row 5
		new LED(0,80,LEDType.ONE,this),
		new LED(20,80,LEDType.ONE,this),
		new LED(40,80,LEDType.ONE,this),
		new LED(60,80,LEDType.ONE,this),
		//Row 6
		new LED(0,100,LEDType.ONE,this),
		new LED(20,100,LEDType.ONE,this),
		new LED(40,100,LEDType.ONE,this),
		new LED(60,100,LEDType.ONE,this),
		//Row 7
		new LED(0,120,LEDType.ONE,this),
		new LED(20,120,LEDType.ONE,this),
		new LED(40,120,LEDType.ONE,this),
		new LED(60,120,LEDType.ONE,this)
		};
	}
	
	public Digit(int x, int y, Clock clock) {
		this.x=x;
		this.y=y;
		this.clock = clock;
		createLEDs();
	}
	
	public void setDigit(int digit) {
		this.digit = digit;
	}
	
	public void draw(Context2d context) {
	    context.save();
	    boolean[] digitMap = digits.get(digit);
	    context.translate(x, y);
	    for(int i=0;i<leds.length;i++) {
	    	LED led = leds[i];
	    	led.setOn(digitMap[i]);
	    	led.draw(context);
	    }
	    context.restore();
	}
}
